import { IPSApplicationObject } from '../ipsapplication-object';
import { IPSAppDEField } from './ipsapp-defield';
import { IPSAppDataEntity } from './ipsapp-data-entity';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSAppDERS
 */
export interface IPSAppDERS extends IPSApplicationObject {
  /**
   * 行为关系模式
   * @description 值模式 [实体接口行为关系模式] {0：无行为、 1：继承行为、 2：指定行为 }
   * @type {( number | 0 | 1 | 2)}
   */
  actionRSMode: number | 0 | 1 | 2;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 代码名称2
   * @type {string}
   */
  codeName2: string;

  /**
   * 数据关系模式
   * @description 值模式 [实体接口数据关系模式] {1：新建、 2：更新、 4：获取、 8：查询 }
   * @type {( number | 1 | 2 | 4 | 8)}
   */
  dataRSMode: number | 1 | 2 | 4 | 8;

  /**
   * 主实体代码标识
   * @type {string}
   */
  majorDECodeName: string;

  /**
   * 主实体代码标识2
   * @type {string}
   */
  majorDECodeName2: string;

  /**
   * 主实体名称
   * @type {string}
   */
  majorDEName: string;

  /**
   * 主应用实体对象
   *
   * @type {IPSAppDataEntity}
   */
  getMajorPSAppDataEntity(): IPSAppDataEntity | null;

  /**
   * 主应用实体对象
   *
   * @type {IPSAppDataEntity}
   */
  get majorPSAppDataEntity(): IPSAppDataEntity | null;

  /**
   * 主应用实体对象（必须存在）
   *
   * @type {IPSAppDataEntity}
   */
  getMajorPSAppDataEntityMust(): IPSAppDataEntity;

  /**
   * 从实体代码标识
   * @type {string}
   */
  minorDECodeName: string;

  /**
   * 从实体代码标识2
   * @type {string}
   */
  minorDECodeName2: string;

  /**
   * 从实体名称
   * @type {string}
   */
  minorDEName: string;

  /**
   * 从应用实体对象
   *
   * @type {IPSAppDataEntity}
   */
  getMinorPSAppDataEntity(): IPSAppDataEntity | null;

  /**
   * 从应用实体对象
   *
   * @type {IPSAppDataEntity}
   */
  get minorPSAppDataEntity(): IPSAppDataEntity | null;

  /**
   * 从应用实体对象（必须存在）
   *
   * @type {IPSAppDataEntity}
   */
  getMinorPSAppDataEntityMust(): IPSAppDataEntity;

  /**
   * 关系项
   * @type {string}
   */
  parentFilter: string;

  /**
   * 父关系连接属性
   *
   * @type {IPSAppDEField}
   */
  getParentPSAppDEField(): IPSAppDEField | null;

  /**
   * 父关系连接属性
   *
   * @type {IPSAppDEField}
   */
  get parentPSAppDEField(): IPSAppDEField | null;

  /**
   * 父关系连接属性（必须存在）
   *
   * @type {IPSAppDEField}
   */
  getParentPSAppDEFieldMust(): IPSAppDEField;

  /**
   * 关系模式
   * @description 值模式 [应用实体关系模式] {1：应用自建、 2：实体服务接口关系 }
   * @type {( number | 1 | 2)}
   */
  rSMode: number | 1 | 2;

  /**
   * 临时数据次序
   * @type {number}
   * @default -1
   */
  tempDataOrder: number;

  /**
   * 数组模式
   * @type {boolean}
   * @default true
   */
  array: boolean;

  /**
   * 数据建立关联输出
   * @type {boolean}
   * @default false
   */
  enableCreateDataRS: boolean;

  /**
   * 数据获取关联输出
   * @type {boolean}
   * @default false
   */
  enableGetDataRS: boolean;

  /**
   * 数据查询关联输出
   * @type {boolean}
   * @default false
   */
  enableSelectDataRS: boolean;

  /**
   * 数据更新关联输出
   * @type {boolean}
   * @default false
   */
  enableUpdateDataRS: boolean;

  /**
   * 主实体主模式
   * @type {boolean}
   * @default true
   */
  majorDEMajor: boolean;
}
